package com.ekgc.addressbook.dao.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ekgc.addressbook.common.ContactGroupRelation;
import com.ekgc.addressbook.common.UserGroup;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface GroupMapper extends BaseMapper<UserGroup> {
    @Select("SELECT " +
            "g.group_name, " +
            "g.id,"+
            "COUNT(c.id) AS membercount " +  // 统计联系人数量，映射到membercount字段
            "FROM user_info u " +
            "JOIN user_group g ON u.id = g.user_id " +
            "LEFT JOIN contact_group_relation cgr ON g.id = cgr.group_id " +  // 左连接避免无成员的组被过滤
            "LEFT JOIN contacts c ON cgr.contact_id = c.id " +
            "WHERE u.phone_number = #{phoneNumber} " +
            "GROUP BY g.id, g.group_name")  // 按组ID和名称分组，确保COUNT正确
    List<UserGroup> selectData(String phoneNumber);

    /**
     * 根据手机号码和 userid 查询用户组的主键 id
     * @param phoneNumber 手机号码
     * @param userId 用户 ID
     * @return 用户组的主键 id
     */
    @Select("SELECT g.id FROM user_info u " +
            "JOIN user_group g ON u.id = g.user_id " +
            "WHERE u.phone_number = #{phoneNumber} AND u.id = #{userId}")
    Integer findGroupIdByPhoneNumberAndUserId(@Param("phoneNumber") String phoneNumber, @Param("userId") Integer userId);

    /**
     * 根据用户组的主键 id 删除联系人 - 分组关联表的数据
     * @param groupId 用户组的主键 id
     * @return 删除的记录数
     */
    @Delete("DELETE FROM contact_group_relation WHERE group_id = #{groupId}")
    int deleteContactGroupRelationByGroupId(@Param("groupId") Integer groupId);

    /**
     * 根据用户组的主键 id 删除用户组表的数据
     * @param groupId 用户组的主键 id
     * @return 删除的记录数
     */
    @Delete("DELETE FROM user_group WHERE id = #{groupId}")
    int deleteUserGroupByGroupId(@Param("groupId") Integer groupId);

    /**
     * 插入新的用户组
     * @param userGroup 用户组对象
     * @return 插入成功的记录数
     */
    @Insert("INSERT INTO user_group (group_name, user_id, create_time) VALUES (#{groupName}, #{userId}, NOW())")
    int insertUserGroup(UserGroup userGroup);

    /**
     * 根据分组 ID 删除分组（物理删除）
     * @param groupId 分组 ID
     * @return 删除的记录数
     */
    @Delete("DELETE FROM user_group WHERE id = #{groupId}")
    int deleteUserGroupById(Integer groupId);

    @Delete("DELETE FROM user_group WHERE id = #{groupId}")
    void deleteGroupById(int groupId);

    /**
     * 根据 contactId 查询记录
     * @param contactId 联系人 ID
     * @return 联系人 - 分组关联记录
     */
    @Select("SELECT * FROM contact_group_relation WHERE contact_id = #{contactId}")
    ContactGroupRelation selectByContactId(Integer contactId);

    /**
     * 插入新的联系人 - 分组关联记录
     * @param contactId 联系人 ID
     * @param groupId 分组 ID
     */
    @Insert("INSERT INTO contact_group_relation (contact_id, group_id) VALUES (#{contactId}, #{groupId})")
//    @Options(useGeneratedKeys = true, keyProperty = "id")
    void insertContactGroupRelation(Integer contactId, Integer groupId);

    /**
     * 更新联系人 - 分组关联记录
     * @param contactId 联系人 ID
     * @param groupId 分组 ID
     */
    @Update("UPDATE contact_group_relation SET group_id = #{groupId} WHERE contact_id = #{contactId}")
    void updateContactGroupRelation(Integer contactId, Integer groupId);


}